﻿#pragma once

#include <ctime>
#include <string>

#include <breaking/time/time.h>

namespace breaking
{
	/**
	 * @brief 日期类, 定义了获取年 月 日等接口
	 */
	class date
	{
	public:
		date();
		explicit date(const time& _time);
		~date();

		/**
		 * @brief 转换为time
		 * @return
		 */
		time to_time() const;

		/**
		 * @brief 年
		 * @return
		 */
		int32_t year() const;
		void year(int32_t _year);

		/**
		 * @brief 月
		 * @return
		 */
		int32_t month() const;
		void month(int32_t _month);

		/**
		 * @brief 日
		 * @return
		 */
		int32_t day() const;
		void day(int32_t _day);

		/**
		 * @brief 时
		 * @return
		 */
		int32_t hour() const;
		void hour(int32_t _hour);

		/**
		 * @brief 分
		 * @return
		 */
		int32_t minute() const;
		void minute(int32_t _min);

		/**
		 * @brief 秒
		 * @return
		 */
		int32_t sec() const;
		void sec(int32_t _sec);

		/**
		 * @brief 毫秒
		 * @return
		 */
		int32_t msec() const;
		void msec(int32_t _msec);

		/**
		 * @brief 获取星期
		 * @return
		 */
		int32_t week() const;

		/**
		 * @brief 获取本月天数
		 * @return
		 */
		int32_t get_days_in_month();

		/**
		 * @brief 以  2024-08-07 07:09:20  格式输出
		 * @return
		 */
		std::string to_string();

	private:
		// 静态分配的时间指针, 这个静态分配的内存不需要（也不应该）由用户释放，因为它是由标准库管理的
		std::tm			m_tm;
		// 毫秒
		int32_t			m_msec;
	};
}